#ifndef _POINT_H_
#define _POINT_H_

class Point
{
	public:
			
		// constants
		static const Point ZERO;
		static const Point ONE;

	// object management
	public:
		Point	(void);									
		Point	(int x, int y);						
		Point	(const Point& rhs);					
		~Point(void);									

		// operators
		Point& operator=	(const Point& rhs);
		Point  operator+	(const Point& rhs) const;
		Point  operator-	(const Point& rhs) const;
		Point  operator*	(const int scalar) const;
		Point  operator/	(const int scalar) const;
		Point& operator+=	(const Point& rhs);
		Point& operator-=	(const Point& rhs);
		Point& operator*=	(const int scalar);
		Point& operator/=	(const int scalar);
		bool	 operator==	(const Point& rhs);	
		bool	 operator!=	(const Point& rhs);

		Point	 operator-	(void) const;

		// arithmetic operations
		Point Add		(const Point &rhs);
		Point Subtract	(const Point &rhs);
		Point Multiply	(int scalar);
		Point Divide	(int scalar);

		// other operations
		float	Length			(void) const;
		float	LengthSquared	(void) const;
		bool	Equals			(const Point &v) const;

		//static methods
		static Point Lerp				(const Point &start, const Point &end, int amount);
		static float Distance			(const Point &lhs, const Point &rhs);
		static float DistanceSquared	(const Point &lhs, const Point &rhs);
			
public:

		// member variables
		int X;
		int Y;

};

#endif // end of #ifndef _POINT_H_
